Bean Validation এর ভূমিকা এবং Jackson এর সাথে Integration

Java Technologies - জ্যাকসন (Jackson) - Jackson এবং Bean Validation Integration
194

Bean Validation একটি Java Specification যা Java ক্লাস, প্রপার্টি এবং মেথডের উপর কনস্ট্রেইন্ট (constraint) আরোপ করতে ব্যবহৃত হয়। এটি সাধারণত Jakarta Bean Validation (JSR 380) অথবা Hibernate Validator এর মাধ্যমে ইমপ্লিমেন্ট করা হয়। Jackson এর সাথে Bean Validation ইন্টিগ্রেশন ব্যবহার করে ডেটা ভ্যালিডেশন এবং JSON সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন আরো কার্যকর করা যায়।


Bean Validation এর ভূমিকা

  1. ডেটা ভ্যালিডেশন: ইনপুট ডেটা (JSON, XML) ডেসিরিয়ালাইজ করার সময় ডেটা সঠিক কিনা তা নিশ্চিত করা।
  2. কোড সিম্পলিসিটি: ভ্যালিডেশন লজিক প্রপার্টি বা মডেল স্তরে সরাসরি ডিক্লেয়ার করা যায়।
  3. API সিকিউরিটি: REST API এর ডেটা ইন্টিগ্রিটির জন্য উপযোগী।
  4. অটোমেটিক চেকিং: ভ্যালিডেশন কনস্ট্রেইন্ট স্বয়ংক্রিয়ভাবে চেক হয়।

Bean Validation এর অ্যানোটেশন

Bean Validation-এ নিম্নলিখিত অ্যানোটেশনগুলো সাধারণত ব্যবহৃত হয়:

  • @NotNull: ভ্যালু null হতে পারবে না।
  • @Size: একটি স্ট্রিং, কালেকশন বা অ্যারের সাইজ নির্ধারণ করে।
  • @Min এবং @Max: সংখ্যা সংক্রান্ত সীমা নির্ধারণ করে।
  • @Pattern: একটি স্ট্রিং নির্দিষ্ট রেগুলার এক্সপ্রেশন অনুযায়ী ভ্যালিড হয় কিনা চেক করে।
  • @Email: একটি স্ট্রিং ইমেইল অ্যাড্রেস হিসেবে ভ্যালিড কিনা তা নিশ্চিত করে।

Jackson এবং Bean Validation এর Integration

Jackson-এর মাধ্যমে JSON ডেটা ডেসিরিয়ালাইজ করার সময় Bean Validation ব্যবহার করে ডেটা ভ্যালিডেশন করা যায়। এটি সাধারণত Spring Boot বা Hibernate Validator এর মাধ্যমে ইন্টিগ্রেটেড করা হয়।


উদাহরণ: Bean Validation এর ব্যবহার এবং Jackson Integration

১. Maven ডিপেন্ডেন্সি

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.el</artifactId>
    <version>5.0.0</version>
</dependency>

২. Model Class তৈরি করুন

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

public class User {

    @NotNull(message = "Name cannot be null")
    @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters")
    private String name;

    @Email(message = "Email should be valid")
    private String email;

    @Min(value = 18, message = "Age must be at least 18")
    private int age;

    // Getters এবং Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

৩. JSON Deserialization এর সময় Bean Validation প্রয়োগ করুন

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;

import java.util.Set;

public class BeanValidationExample {
    public static void main(String[] args) {
        String json = """
        {
            "name": "Jo",
            "email": "invalid-email",
            "age": 15
        }
        """;

        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // JSON থেকে User অবজেক্টে রূপান্তর
            User user = objectMapper.readValue(json, User.class);

            // Bean Validation চেক করা
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();

            Set<ConstraintViolation<User>> violations = validator.validate(user);

            if (!violations.isEmpty()) {
                for (ConstraintViolation<User> violation : violations) {
                    System.out.println(violation.getMessage());
                }
            } else {
                System.out.println("User is valid: " + user.getName());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Name must be between 3 and 50 characters
Email should be valid
Age must be at least 18

Spring Boot এর মাধ্যমে সহজ Integration

Controller এর উদাহরণ

Spring Boot ব্যবহার করলে ভ্যালিডেশন আরো সহজ হয়। Spring @Valid অ্যানোটেশন সরাসরি ব্যবহার করে Bean Validation ইন্টিগ্রেট করা যায়।

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import jakarta.validation.Valid;

@RestController
public class UserController {

    @PostMapping("/users")
    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {
        return ResponseEntity.ok("User is valid: " + user.getName());
    }
}

উপকারিতা

  1. ডেটা ইন্টিগ্রিটি: Bean Validation নিশ্চিত করে যে ইনপুট ডেটা সর্বদা নির্ধারিত কনস্ট্রেইন্ট মেনে চলবে।
  2. ডাইনামিক Integration: Jackson এর মাধ্যমে JSON ডেসিরিয়ালাইজ করার সময় অটোমেটিক ভ্যালিডেশন।
  3. অ্যাপ্লিকেশন সিকিউরিটি: API ভ্যালিডেশন নিশ্চিত করে যে অননুমোদিত বা ভুল ডেটা প্রসেস করা হবে না।
  4. কমপ্লেক্সিটি হ্রাস: কোডের অন্যত্র ভ্যালিডেশন লজিক না লিখে সরাসরি মডেলে সংজ্ঞায়িত করা যায়।

Jackson এবং Bean Validation এর ইন্টিগ্রেশন ডেটা প্রক্রিয়াকরণের সময় ভ্যালিডেশন নিশ্চিত করার একটি শক্তিশালী এবং কার্যকর পদ্ধতি। এটি বিশেষ করে RESTful API ডেভেলপমেন্টে সঠিক এবং নিরাপদ ডেটা হ্যান্ডলিংয়ের জন্য অত্যন্ত কার্যকর।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...